package BloodTimeHybernateDO;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.Proxy;

import dao.api.DataObject;

/**
 * 
 * @author Manuel A. Quintero V.
 * 
 */
@Entity
@Table(name = "familia")
@Proxy(lazy = false)
public class FamiliaDO implements DataObject{

	// -------------------------------
	// Identificador auto-incremental
	// -------------------------------
	
	private int id;
	
	// -------------------
	// Datos de la Familia
	// -------------------
	 
	private String nombre;
	private String descripcion;
	private byte [] imagen;
	
	// ----------------------------
	// Valores Iniciales Requeridos
	// ----------------------------
	
	private int valorInicialFuerza;
	private int valorInicialDefensa;
	private int valorInicialSigilosidad;
	private int valorInicialVelocidad;
	private int valorInicialHabNegocios;
	private int valorInicialHabArmas;
	
	// ------------
	// Referencias
	// ------------
	
	private List<VampiroDO> vampiroList = //
		new ArrayList<VampiroDO>();
	
// ------------------------------------------------------------------------
	
	public FamiliaDO() {
		// Empty
	}
	
	@Override
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="familia_sequence")
	@SequenceGenerator(sequenceName = "familia_sequence", name = "familia_sequence",allocationSize=1)
	public int getId() {
		return id;
	}

	@Override
	public void setId(int id) {
		this.id = id;
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getDescripcion() {
		return descripcion;
	}
	
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	
	public byte [] getImagen() {
		return imagen;
	}
	
	public void setImagen(byte [] imagen) {
		this.imagen = imagen;
	}
	
	public int getValorInicialFuerza() {
		return valorInicialFuerza;
	}
	
	public void setValorInicialFuerza(int valorInicialFuerza) {
		this.valorInicialFuerza = valorInicialFuerza;
	}
	
	public int getValorInicialDefensa() {
		return valorInicialDefensa;
	}
	
	public void setValorInicialDefensa(int valorInicialDefensa) {
		this.valorInicialDefensa = valorInicialDefensa;
	}
	
	public int getValorInicialSigilosidad() {
		return valorInicialSigilosidad;
	}
	
	public void setValorInicialSigilosidad(int valorInicialSigilosidad) {
		this.valorInicialSigilosidad = valorInicialSigilosidad;
	}
	
	public int getValorInicialVelocidad() {
		return valorInicialVelocidad;
	}
	
	public void setValorInicialVelocidad(int valorInicialVelocidad) {
		this.valorInicialVelocidad = valorInicialVelocidad;
	}
	
	public int getValorInicialHabNegocios() {
		return valorInicialHabNegocios;
	}
	
	public void setValorInicialHabNegocios(int valorInicialHabNegocios) {
		this.valorInicialHabNegocios = valorInicialHabNegocios;
	}
	
	public int getValorInicialHabArmas() {
		return valorInicialHabArmas;
	}
	
	public void setValorInicialHabArmas(int valorInicialHabArmas) {
		this.valorInicialHabArmas = valorInicialHabArmas;
	}
	@OneToMany(mappedBy = "familiaId")
	@LazyCollection(LazyCollectionOption.FALSE)
	@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	public List<VampiroDO> getVampiroList() {
		return vampiroList;
	}

	public void setVampiroList(List<VampiroDO> vampiroList) {
		this.vampiroList = vampiroList;
	}

}
